'use strict';

const { logger } = require('ee-core/log');
const { exampleService } = require('../service/example');
const { getMainWindow } = require('ee-core/electron');
const koffi = require('koffi');
const Ps = require('ee-core/ps');
const path = require('path');
/**
 * example
 * @class
 */
class ExampleController {

  /**
   * 所有方法接收两个参数
   * @param args 前端传的参数
   * @param event - ipc通信时才有值。详情见：控制器文档
   */

  /**
   * test
   */
  async test(a) {
    const result = await exampleService.test('electron');
    debugger;
    logger.info('service result:', result);
    return 'hello electron-egg';
  }
  async test2(data, event) {
    debugger;
    console.log("test2:", data)
    // console.log("event:",event)
    let win = getMainWindow();
    win.webContents.send("controller/example/test2", { age: 21 })
    return 'hello test2';
  }
  async invokeDll() {

    const dllFile = 'myDllDemo.dll';
    const dllPath = path.join(Ps.getExtraResourcesDir(), "dll1", dllFile);

    // 加载 user32.dll 库
    const user32 = koffi.load(dllPath);
    const add = user32.func('int add(int x, int y)',  // 参数名改为 x 和 y，不影响调用
      {
        x: 'int',  // 第一个参数，类型为 int
        y: 'int'   // 第二个参数，类型为 int
      },
      'int');
    const result = add(1, 1); // MB_ICONINFORMATION
    return result;

    // const user32 = koffi.load('user32.dll');

    // // 定义 MessageBox 函数的签名
    // const MessageBox = user32.func(
    //   'int MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)',
    //   {
    //     hWnd: 'pointer',      // 窗口句柄
    //     lpText: 'string',     // 消息文本
    //     lpCaption: 'string',  // 标题
    //     uType: 'uint'         // 消息框类型
    //   },
    //   'int'                   // 返回值类型
    // );

    // // 调用 MessageBox 函数
    // const result = MessageBox(null, 'Hello from Node.js!', 'Koffi Demo', 0x00000040); // MB_ICONINFORMATION
    // return result;
  }

  async getHdInfo(data, event){

  }
}
ExampleController.toString = () => '[class ExampleController]';

module.exports = ExampleController; 